#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//void string_test1()
//{
//	string s1("hello word");
//	string s2(s1, 4, 4);
//
//	
//	string s3("xxxxxxxx", 3);
//	size_t n = 5;
//	string s4(n ,'x');
//	cout << s1 << endl;
//	cout << s2 << endl;
//	cout << s3 << endl;
//	cout << s4 << endl;
//}
//void string_test2()
//{
//	/*string s1("hello word");
//
//	string::reverse_iterator rit = s1.rbegin();
//	while (rit != s1.rend())
//	{
//		cout << *rit;
//		rit++;
//	}
//	cout << endl;*/
//
//
//	string s1("123456");
//
//	s1.resize(3);
//	cout << s1.size() << endl;
//	cout << s1.length() << endl;
//	cout << s1.capacity() << endl;
//
//	cout << "===================" << endl;
//	s1.reserve(2);
//	cout << s1.size() << endl;
//	cout << s1.length() << endl;
//	cout << s1.capacity() << endl;
//	cout << s1 << endl;
//
//	//cout << "===================" << endl;
//	//s1.clear();
//	//cout << s1.size() << endl;
//	//cout << s1.length() << endl;
//	//cout << s1.capacity() << endl;
//	//cout << s1 << endl;
//
//	cout << "===================" << endl;
//	s1 += "ccccccc";
//	s1.reserve(100);
//	cout << s1.capacity() << endl;
//
//	s1.shrink_to_fit();
//	cout << s1.size() << endl;
//	cout << s1.length() << endl;
//	cout << s1.capacity() << endl;
//	cout << s1 << endl;
//
//
//}
//
//void string_test3()
//{
//	string s1("hello word");
//
//	//for (int i = 0; i < s1.size(); i++)
//	//{
//	//	s1[i]++;
//	//}
//	//cout << s1 << endl;
//
//	/*for(auto& c : s1)
//	{
//		c++;
//	}
//	cout << s1 << endl;*/
//
//	/*for (int i = 0; i < s1.size(); i++)
//	{
//		cout << s1.at(i) ;
//	}*/
//
//	s1.append("111");
//	cout << s1 << endl;
//	s1.append(10, 'x');
//	cout << s1 << endl;
//	s1.append("vvvvvvvvvv", 2);
//	cout << s1 << endl;
//	s1.append("qqqq");
//	cout << s1 << endl;
//	s1.append("cccccccccccc",0,3);
//	cout << s1 << endl;
//}
//
//
//void string_test4()
//{
//	string s1("hello word");
//
//	s1.push_back('a');
//	cout << s1 << endl;
//
//	/*s1.assign("xxx");
//	cout << s1 << endl;*/
//
//	s1.erase(5, 3);
//	cout << s1 << endl;
//
//
//}
//class Solution {
//public:
//    class Sub
//    {
//    public:
//        Sub()
//        {
//            sub += sum;
//            sum++;
//        }
//        int subGet()
//        {
//            return sub;
//        }
//    private:
//        static int sub;
//    };
//
//    int Sum_Solution(int n) {
//        Sub a[100];
//
//        return a->subGet();
//    }
//
//private:
//
//    static int sum;
//};
//int Solution::sum = 1;
//int Solution::Sub::sub = 0;

class Solution {
public:
    bool isLetter(char ch)
    {
        if (ch >= 'a' || ch <= 'z')
            return true;
        if (ch >= 'A' || ch <= 'Z')
            return true;

        return false;
    }
    string reverseOnlyLetters(string s) {
        if (s.empty())
        {
            return s;
        }

        int begin = 0, end = s.size() - 1;
        while (begin < end)
        {
            // while(isLetter(s[beging])&&isLetter(s[end]))
            // {
            //     Swap(s[begin],s[end]);
            //     ++begin;
            //     --end;
            // }
            while (begin < end && !isLetter(s[begin]))
                ++begin;

            while (begin < end && !isLetter(s[end]))
                --end;

            swap(s[begin], s[end]);
            ++begin;
            --end;
        }
        return s;
    }
};
int main()
{
	//string_test4();
    string s = "a-bC-dEf-ghIj";
    Solution a;
    a.reverseOnlyLetters(s);

    cout << s << endl;
	return 0;
}